home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / telecomdemo / main.c < prev    next >
C/C++ Source or Header  |  1997-07-10  |  7KB  |  282 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)main.c    V1.12    3/17/95";
  3. #endif
  4.  
  5. /*
  6.  |    File name: main.c
  7.  |========================================================================
  8.  |
  9.  |    Copyright (c) 1990 -- V.I. Corporation
  10.  |
  11.  |========================================================================
  12.  */
  13.  
  14. #include "simulate.h"
  15. #include "tlc_fundecl.h"
  16.  
  17. #ifdef WINNT
  18. #include <windows.h>
  19. #endif /* WINNT */
  20.  
  21. #ifdef WINNT
  22.  
  23. LOCAL INT TimeoutInterval = 25;
  24.  
  25. LOCAL HWND Hwnd;
  26. LOCAL VOID CALLBACK TimeOutProc V_P_((HWND hwnd,
  27.                                       UINT uMsg,
  28.                                       UINT idEvent,
  29.                                       DWORD dwTime));
  30.  
  31. #else /* UNIX */
  32.  
  33.  
  34. /* Include the X based files so we can add AppTimeOuts */
  35. #ifdef CONST
  36. #undef CONST
  37. #endif
  38.  
  39. #ifndef __STDC__
  40. #define _NO_PROTO
  41. #endif
  42.  
  43. /* X11 include files */
  44. #include <X11/Xlib.h>
  45. #include <X11/Intrinsic.h>
  46.  
  47. LOCAL XtAppContext app_context;
  48.  
  49. LOCAL  void UpdateProc V_P_((ADDRESS args, XtIntervalId *interval_id));
  50.  
  51. #endif /* WINNT */
  52.  
  53. /***************** Begin Function Declarations *************/
  54. LOCAL  BOOLPARAM TimeForNextStep V_P_((void));
  55. LOCAL  void DisplayWaitScreen V_P_((void));
  56. LOCAL  void UpdateDisplay V_P_((void));
  57. /***************** End Function Declarations *************/
  58.  
  59. #define DEF_SEARCH_PATH    (ADDRESS)NULL
  60. #define DEF_DISPFORMS    (ADDRESS)NULL
  61.  
  62.  
  63. #ifdef WINNT
  64. int APIENTRY WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  65.                      LPSTR lpCmdLine,  int nCmdShow  )
  66.  
  67. #else  /* Not WINNT */
  68. int 
  69. main (argc, argv)
  70.      int argc;
  71.      char *argv[];
  72.  
  73. #endif /* WINNT */
  74.  
  75. {
  76.   OBJECT location;
  77.   CHAR *device = NULL;
  78.  
  79.   /*
  80.    *   See if the user specified the device name on the command line
  81.    */
  82. #ifdef WINNT
  83.   device = "W";
  84.  
  85. #else  /* Not WINNT */
  86.   if (argc > 1)
  87.     device = argv[1];
  88.  
  89. #endif /* WINNT */
  90.  
  91.  
  92. #ifdef VMS
  93.   VUoff_copyright();
  94. #endif
  95.  
  96.   (VOID) TInit (DEF_SEARCH_PATH, DEF_DISPFORMS);
  97.  
  98.   /*
  99.    *   Load in all views, create the two screens and start the simulation.
  100.    */
  101.   CreateStatusScreen (device);
  102.   DisplayWaitScreen ();
  103.   CreateLogScreen ();
  104.   CreateControlScreen(device);
  105.   InitializeSimulation ();
  106.   LoadAuxStatusViews ();
  107.   StartSimulation ();
  108.  
  109.   /* Reset the cursors */
  110.   (VOID) TscSetCurrentScreen (StatusScreen);
  111.   (VOID) GRset (V_ACTIVE_CURSOR, V_END_OF_LIST);
  112.   (VOID) TscSetCurrentScreen (ControlScreen);
  113.   (VOID) GRset (V_ACTIVE_CURSOR, V_END_OF_LIST);
  114.   (VOID) TscSetCurrentScreen (LogScreen);
  115.   (VOID) GRset (V_ACTIVE_CURSOR, V_END_OF_LIST);
  116.  
  117.  
  118. #ifdef WINNT
  119.     /* Get the Windows based information */
  120.     (VOID) GRget (V_WIN32_WINDOW_HANDLE, &Hwnd, V_END_OF_LIST);
  121.     
  122.  /* Post a timeout for dynamic updates
  123.   |  The timeout procedure will update the dynamics of
  124.   |  all screens which have been opened. The procedure is invoked
  125.   |  whenever the specified time interval elapses. The interval is
  126.   |  specified in milliseconds.
  127.   */
  128.     SetTimer (Hwnd, (UINT)Hwnd, TimeoutInterval, (TIMERPROC)TimeOutProc);
  129. #else /* UNIX */
  130.   /* Extract the X information so we can setup a Time-Out Proc
  131.   |  for updating....
  132.   |    Get the Xt Application Context information.
  133.   |    Post a timeout procedure will update the dynamics of
  134.   |      all screens which have been opened. The procedure is invoked
  135.   |      whenever the specified time interval elapses. The interval is
  136.   |      specified in milliseconds.
  137.   */
  138.   (VOID) GRget (V_X_APPLIC_CONTEXT, &app_context, V_END_OF_LIST);
  139.   XtAppAddTimeOut (app_context, TimeoutInterval, 
  140.            (XtTimerCallbackProc) UpdateProc, NULL);
  141. #endif /* WINNT */
  142.  
  143.   /*
  144.    *   Loop until the quit flag is set.  Handle input in each of the windows,
  145.    *     check to see if it's time for the next simulation step, and if it is,
  146.    *     then do the next step and update the screens.
  147.    */
  148.   while (*Control.quit_flag == FALSE)
  149.     {
  150.       OBJECT LocationScreen;
  151.  
  152.       while ((location = VOloWinEventPoll ((INT) V_NO_WAIT)))
  153.         {
  154.           LocationScreen = VOloScreen (location);
  155.           if (LocationScreen == ControlScreen)
  156.             {
  157.               (VOID) TscSetCurrentScreen (ControlScreen);
  158.               HandleControlInput (location);
  159.             }
  160.           else if (LocationScreen == StatusScreen)
  161.             {
  162.               (VOID) TscSetCurrentScreen (StatusScreen);
  163.               HandleStatusInput (location);
  164.             }
  165.           else if (LocationScreen == LogScreen)
  166.             {
  167.               (VOID) TscSetCurrentScreen (LogScreen);
  168.               HandleLogInput (location);
  169.             }
  170.         }
  171.  
  172.       UpdateDisplay();
  173.     }
  174.  
  175.   /*
  176.    *   When we're done, destroy the screens and exit.
  177.    */
  178.   DestroyLogScreen ();
  179.   DestroyControlScreen ();
  180.   DestroyStatusScreen ();
  181.   (VOID) TTerminate ();
  182.   S_EXIT (EXIT_OK);
  183.   return 1;
  184. }
  185.  
  186. LOCAL VOID UpdateDisplay V_P_((void))
  187. {
  188.   if (TimeForNextStep ())
  189.     if (*Control.pause_flag == 0)
  190.       {
  191.         UpdateStatusScreen ();
  192.         UpdateControlScreen ();
  193.         NextSimulationStep ();
  194.       }
  195. }
  196.  
  197. /*
  198.  *   TimeForNextStep -- see if it's time for the next simulation step.  Use
  199.  *     DataViews internal routines to first sleep for a tenth of a second,
  200.  *     and then check to see if enough time has passed for the next simulation
  201.  *     step.
  202.  */
  203. LOCAL BOOLPARAM TimeForNextStep 
  204. V_P_ ((void))
  205. {
  206.   INT secs, tenths;
  207.   LOCAL ULONG prev_time = 0;
  208.   ULONG curr_time;
  209.   DV_BOOL ready = NO;
  210.   
  211.   Mgettime (&secs, &tenths);
  212.   curr_time = (ULONG)(secs + (tenths / 10.0));
  213.   if ( curr_time - prev_time > *Control.delay_time)
  214.         {  
  215.             prev_time = curr_time;
  216.             ready = YES;
  217.         }
  218.   
  219.   return ready;
  220. }
  221.  
  222.  
  223. /*
  224.  *   DisplayWaitScreen -- display the initial screen.  Load a message view
  225.  *     and display it while the rest of the views are being loaded in.
  226.  */
  227. LOCAL void DisplayWaitScreen 
  228. V_P_ ((void))
  229. {
  230.   VIEW view;
  231.   DRAWPORT drawport;
  232.  
  233. /*
  234.   view = TviLoad( "top_map.v" );
  235. */
  236.   view = TviLoad ("wait.v");
  237.   drawport = TdpCreate (StatusScreen, view, &FullScreen, &WholeDrawing);
  238.   (VOID) TdpDraw (drawport);
  239.   (VOID) TdpDestroy (drawport);
  240.   (VOID) TviDestroy (view);
  241. }
  242.  
  243.  
  244. /*
  245.  *   VUcopyright -- disable the copyright screen.  This local function
  246.  *     overrides the DataViews internal routine that displays the copyright.
  247.  */
  248. #ifndef VMS
  249. void VUcopyright 
  250. V_P_ ((void))
  251. {
  252. }
  253. #endif
  254.  
  255. #ifdef WINNT
  256. /*ARGSUSED*/
  257. LOCAL VOID CALLBACK
  258. TimeOutProc (hwnd, uMsg, idEvent, dwTime)
  259.     HWND hwnd;
  260.   UINT uMsg;
  261.     UINT idEvent;
  262.     DWORD dwTime;
  263. {
  264.     UpdateDisplay ();
  265. }
  266.  
  267. #else /* UNIX */
  268. /*ARGSUSED*/
  269. LOCAL void 
  270. UpdateProc (args, interval_id)
  271.      ADDRESS args;
  272.      XtIntervalId *interval_id;
  273. {
  274.  
  275.   UpdateDisplay ();
  276.  
  277.   /* Re-Post the Time-Out */
  278.   XtAppAddTimeOut (app_context, TimeoutInterval, 
  279.            (XtTimerCallbackProc) UpdateProc, NULL);
  280. }
  281. #endif  /* WINNT */
  282.